Skip to content

Kubernetes Pod 与探针机制

一句话机制

Pod 是 Kubernetes 最小调度单元,程序必须部署在容器里、容器必须跑在 Pod 里;每个 Pod 内有一个根容器 Pause 承载 Pod IP(同一 Pod 内所有容器共享)并评估整体健康,kubelet 则通过 探针(Probe) 周期性诊断容器,决定「重启」还是「摘流量」。

Pod 核心结构

  • 根容器 Pause:每个 Pod 默认都有一个,两个作用——① 评估整个 Pod 的健康状态;② 上面设置 Pod IP,Pod 内所有容器共享该 IP。
  • 分类:普通 Pod(存入 etcd、可被重新调度)vs Static Pod(存于某 node 本地文件、只能在该 node 运行)。
  • endpointpodIP + containerPort

生命周期关键状态

维度取值
Pod phasePending → Running → Succeeded / Failed(另有 Unknown)
容器 stateWaiting / Running / Terminated
restartPolicyAlways / OnFailure / Never(重启退避 10s→20s→40s…)
Pod ConditionsPodScheduled / ContainersReady / Initialized / Ready

不变量:Pod 在其生命周期中只被调度一次,一旦绑到某 node 就一直在该 node 上运行,直到停止或被删除。

探针(Probe)

kubelet 对容器的定期诊断,四种探测机制:exec(容器内执行命令)/ grpc / httpGet(HTTP 2xx/3xx)/ tcpSocket(能建 TCP 连接即成功)。

三种探针类型,职责完全不同:

探针判断什么失败后的动作
livenessProbe容器是否存活kill 容器,按 restartPolicy 重启
readinessProbe容器能否响应请求把 Pod IP 从 Service 的 endpoints 摘除(不重启)
startupProbe应用是否已启动成功前禁用其他探针,失败则 kill 重启(慢启动容器专用)

不变量

  1. Pod 是最小单元,不是容器。调度、IP、生命周期都以 Pod 为粒度。
  2. 同一 Pod 内所有容器共享一个 Pod IP 与网络命名空间(由 Pause 根容器承载)。
  3. liveness 管「重启」,readiness 管「流量」——两者判据和解耦是探针的核心心智模型。

常见误解

  • ❌ 「Kubernetes 的最小单元是容器」——错。是 Pod,容器必须被 Pod 包裹。
  • ❌ 「liveness 和 readiness 差不多」——错。liveness 失败触发重启,readiness 失败只是摘流量不重启,混用会引发无谓重启或「健康却接不到流量」。
  • ❌ 「Pod 可以跨节点漂移」——错。Pod 只被调度一次,节点宕机后是靠控制器重建一个新 Pod,而非原 Pod 迁移。
  • ❌ 「容器退出后立刻重启」——错。kubelet 会按 back-off 退避(10s、20s、40s…)重启。

关联

最近更新